1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect.testing.testers;
18
19 import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
20 import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
21
22 import com.google.common.annotations.GwtCompatible;
23 import com.google.common.collect.testing.AbstractMapTester;
24 import com.google.common.collect.testing.Helpers;
25 import com.google.common.collect.testing.features.CollectionSize;
26 import com.google.common.collect.testing.features.MapFeature;
27
28 import java.util.Collection;
29 import java.util.HashMap;
30 import java.util.Map;
31 import java.util.Map.Entry;
32
33
34
35
36
37
38
39 @GwtCompatible
40 public class MapEqualsTester<K, V> extends AbstractMapTester<K, V> {
41 public void testEquals_otherMapWithSameEntries() {
42 assertTrue(
43 "A Map should equal any other Map containing the same entries.",
44 getMap().equals(newHashMap(getSampleEntries())));
45 }
46
47 @CollectionSize.Require(absent = CollectionSize.ZERO)
48 public void testEquals_otherMapWithDifferentEntries() {
49 Map<K, V> other = newHashMap(getSampleEntries(getNumEntries() - 1));
50 Entry<K, V> e3 = getSubjectGenerator().samples().e3;
51 other.put(e3.getKey(), e3.getValue());
52 assertFalse(
53 "A Map should not equal another Map containing different entries.",
54 getMap().equals(other)
55 );
56 }
57
58 @CollectionSize.Require(absent = CollectionSize.ZERO)
59 @MapFeature.Require(ALLOWS_NULL_KEYS)
60 public void testEquals_containingNullKey() {
61 Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
62 entries.add(entry(null, samples.e3.getValue()));
63
64 resetContainer(getSubjectGenerator().create(entries.toArray()));
65 assertTrue("A Map should equal any other Map containing the same entries,"
66 + " even if some keys are null.",
67 getMap().equals(newHashMap(entries)));
68 }
69
70 @CollectionSize.Require(absent = CollectionSize.ZERO)
71 public void testEquals_otherContainsNullKey() {
72 Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
73 entries.add(entry(null, samples.e3.getValue()));
74 Map<K, V> other = newHashMap(entries);
75
76 assertFalse(
77 "Two Maps should not be equal if exactly one of them contains a null "
78 + "key.",
79 getMap().equals(other));
80 }
81
82 @CollectionSize.Require(absent = CollectionSize.ZERO)
83 @MapFeature.Require(ALLOWS_NULL_VALUES)
84 public void testEquals_containingNullValue() {
85 Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
86 entries.add(entry(samples.e3.getKey(), null));
87
88 resetContainer(getSubjectGenerator().create(entries.toArray()));
89 assertTrue("A Map should equal any other Map containing the same entries,"
90 + " even if some values are null.",
91 getMap().equals(newHashMap(entries)));
92 }
93
94 @CollectionSize.Require(absent = CollectionSize.ZERO)
95 public void testEquals_otherContainsNullValue() {
96 Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
97 entries.add(entry(samples.e3.getKey(), null));
98 Map<K, V> other = newHashMap(entries);
99
100 assertFalse(
101 "Two Maps should not be equal if exactly one of them contains a null "
102 + "value.",
103 getMap().equals(other));
104 }
105
106 @CollectionSize.Require(absent = CollectionSize.ZERO)
107 public void testEquals_smallerMap() {
108 Collection<Map.Entry<K, V>> fewerEntries
109 = getSampleEntries(getNumEntries() - 1);
110 assertFalse("Maps of different sizes should not be equal.",
111 getMap().equals(newHashMap(fewerEntries)));
112 }
113
114 public void testEquals_largerMap() {
115 Collection<Map.Entry<K, V>> moreEntries
116 = getSampleEntries(getNumEntries() + 1);
117 assertFalse("Maps of different sizes should not be equal.",
118 getMap().equals(newHashMap(moreEntries)));
119 }
120
121 public void testEquals_list() {
122 assertFalse("A List should never equal a Map.",
123 getMap().equals(Helpers.copyToList(getMap().entrySet())));
124 }
125
126 private static <K, V> HashMap<K, V> newHashMap(
127 Collection<? extends Map.Entry<? extends K, ? extends V>> entries) {
128 HashMap<K, V> map = new HashMap<K, V>();
129 for (Map.Entry<? extends K, ? extends V> entry : entries) {
130 map.put(entry.getKey(), entry.getValue());
131 }
132 return map;
133 }
134 }